import { createRouter, createWebHashHistory } from 'vue-router'
import { constantRoutes } from './routes'

import useUserStore, { useUserStoreHook } from '@/store/modules/user'

//创建路由器
const router = createRouter({
  history: createWebHashHistory(),
  routes: constantRoutes,
})

// 前守卫
router.beforeEach(async (to, from, next) => {
  const userStore = useUserStoreHook()
  const token = userStore.token
  if (token) {
    // 有token
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      // 判断是否有用户信息
      if (userStore.userInfo.name) {
        if (to.name === undefined) {
          // 说明用户刷新了
          next('/404')
        } else {
          next() // 放行（经过后守卫）
        }
      } else {
        // 有token 但是没有用户信息
        try {
          await userStore.getUserInfo()
          // 由于用户刷新，动态路由是异步获取的。
          // 防止刷新的时候异步路由还没有加载完毕,出现空白的效果
          // 需要重新进入一次（会再次经过前守卫），replace:true替换原来页面，防止返回操作
          next({ ...to, replace: true })
        } catch (err) {
          // 获取用户信息失败，直接退出，打回登录页
          await userStore.logout()
          next({ path: '/login', redirect: to.fullPath })
        }
      }
    }
  } else {
    // 无token
    if (to.path === '/login') {
      next()
    } else {
      next({ path: '/login' })
    }
  }
})

// 全局路由后守卫
router.afterEach(() => {})

export default router
